/* Copyright (C) 2007 Free Software Foundation, Inc. 
 * See the copyright notice in the file /usr/LICENSE.
 * Created by flyan on 2020/6/11.
 * QQ: 1341662010
 * QQ-Group:909830414
 * gitee: https://gitee.com/flyanh/
 *
 * 判断一个整数是否是回文数。回文数是指正序（从左向右）和倒序（从右向左）读都是一样的整数。
 *
 * 示例 1:
 * 输入: 121
 * 输出: true
 *
 * 示例 2:
 * 输入: -121
 * 输出: false
 * 解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
 *
 * 示例 3:
 * 输入: 10
 * 输出: false
 * 解释: 从右向左读, 为 01 。因此它不是一个回文数。
 *
 * 进阶:
 * 你能不将整数转为字符串来解决这个问题吗？
 */
#include <iostream>
#include <sstream>
#include <cstring>
#include <cassert>
#include <vector>
#include <unordered_set>
#include <unordered_map>
#include <cmath>

using namespace std;

class Solution {
public:
    /* 字符串比较版本 */
//    static bool isPalindrome(int x) {
//        string s = to_string(x);
//        int size = s.size();
//
//        if(size == 1) return true;
//        /* 首尾是否相同？ */
//        if(size > 1) {
//            if(s[0] != s[size - 1])
//                return false;
//            else {
//                int mid = size / 2;
//                for(int i = 1; i < mid; ++i) {
//                    if(s[i] != s[size - 1 - i]) {
//                        return false;
//                    }
//                }
//            }
//        }
//        return true;
//    }

    /* 进阶版本，不转换为字符串 */
    static bool isPalindrome(const int x) {
        if(x < 0) return false;
        /* 从个位到百位重新计算新的值，如果等于原值说明是一个回文数 */
        long n = 0, y = x;
        while (y) {
            n = n * 10 + (y % 10);
            y /= 10;
        }
        return n == x;
    }
};

int main() {

    cout << (Solution::isPalindrome(2147483647) ? "true" : "false") << endl;
    return 0;
}
